#ifndef __RWNX_GKI_H
#define __RWNX_GKI_H

#ifdef ANDROID_PLATFORM
#include "net/wireless/core.h"
#endif

#if IS_ENABLED(CONFIG_GKI_OPT_FEATURES) && IS_ENABLED(CONFIG_ANDROID) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0))


bool rwnx_cfg80211_rx_spurious_frame(struct net_device *dev,
				const u8 *addr, gfp_t gfp);

bool rwnx_cfg80211_rx_unexpected_4addr_frame(struct net_device *dev,
				const u8 *addr, gfp_t gfp);

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0))
void rwnx_cfg80211_notify_new_peer_candidate(struct net_device *dev, const u8 *addr,
				const u8 *ie, u8 ie_len,
				int sig_dbm, gfp_t gfp);
#endif

void rwnx_cfg80211_report_obss_beacon(struct wiphy *wiphy,
				const u8 *frame, size_t len,
				int freq, int sig_dbm);

void rwnx_cfg80211_ch_switch_notify(struct cfg80211_registered_device *rdev,
				struct net_device *netdev,
				struct cfg80211_chan_def *chandef,
				gfp_t gfp,
				enum nl80211_commands notif,
				u8 count);

void rwnx_cfg80211_ch_switch_started_notify(struct net_device *dev,
				struct cfg80211_chan_def *chandef,
				u8 count);

int rwnx_regulatory_set_wiphy_regd_sync_rtnl(struct wiphy *wiphy,
				struct ieee80211_regdomain *rd);

void rwnx_skb_append(struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list);

bool rwnx_ieee80211_chandef_to_operating_class(struct cfg80211_chan_def *chandef,
				u8 *op_class);

int rwnx_call_usermodehelper(const char *path, char **argv, char **envp, int wait);

#else

#define rwnx_cfg80211_rx_spurious_frame           cfg80211_rx_spurious_frame
#define rwnx_cfg80211_rx_unexpected_4addr_frame   cfg80211_rx_unexpected_4addr_frame

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0))
#define rwnx_cfg80211_notify_new_peer_candidate   cfg80211_notify_new_peer_candidate
#endif

#define rwnx_cfg80211_report_obss_beacon          cfg80211_report_obss_beacon
#define rwnx_cfg80211_ch_switch_notify            cfg80211_ch_switch_notify
#define rwnx_cfg80211_ch_switch_started_notify    cfg80211_ch_switch_started_notify
#define rwnx_regulatory_set_wiphy_regd_sync_rtnl  regulatory_set_wiphy_regd_sync_rtnl
#define rwnx_skb_append                           skb_append
#define rwnx_ieee80211_chandef_to_operating_class ieee80211_chandef_to_operating_class
#define rwnx_call_usermodehelper                  call_usermodehelper

#endif

#endif
